/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.pec.view;

import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.dto.ParametroDto;
import com.brain.core.view.mbean.*;

import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.RecursosManager;
import com.brain.pec.dto.AnalisisPecDto;
import com.brain.pec.dto.CategoriaPecDto;
import com.brain.pec.dto.MatrizDto;
import com.brain.pec.dto.ProcesoPecDto;
import com.brain.pec.manager.AnalisisPecManager;
import com.brain.pec.manager.CategoriaPecManager;
import com.brain.pec.manager.MatrizManager;
import com.brain.pec.manager.ProcesoPecManager;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("procesoPecMBean")
@Scope("session")
public class ProcesoPecMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(ProcesoPecMBean.class);
    @Resource
    private ProcesoPecManager manager;
    @Resource
    private BitacoraManager bitacoraManager;
    @Resource
    private CategoriaPecManager managerCategoria;
    
    @Resource
    private MatrizManager matrizManager;
    
    @Resource
    private RecursosManager recursosManager;
    @Resource
    private AnalisisPecManager analisisPecManager;
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    
    private List<ProcesoPecDto> lista;
    private ProcesoPecDto dto = new ProcesoPecDto();
    private ProcesoPecDto dtoFiltro;
    private String keyEntidad = "key.entidad.pec.proceso";
    private List<CategoriaPecDto> listaCategorias;
    
    private List<ParametroDto> listaNucleosCompra;
    private List<ParametroDto> listaUnidadOrganica;
    private List<ParametroDto> listaGrupoNacional;
    private List<ParametroDto> listaGrupoOtan;
    private List<ParametroDto> listaCaracteristica;
    private List<ParametroDto> listaTiemposAbastecimiento;
    private List<ParametroDto> listaCuadrante;
    private List<ParametroDto> listaTipoProceso;
    private List<ParametroDto> listaTipoCompra;
    private List<ParametroDto> listaNivelPrioridad;
    private List<ParametroDto> listaTipoMonedas;
    private List<ParametroDto> listaFuentesFinanciamiento;    
    
    private List<ParametroDto> listaModalidades;    
    
    private List<ParametroDto> listaFrecuencias;    
    
    private MatrizDto matrizDto;
    private List<MatrizDto> listaMatriz;
    

    public ProcesoPecMBean() {
        this.dtoFiltro = new ProcesoPecDto();
    }

    public String iniciar() {
        this.lista = null;
        this.dto = null;
        this.dtoFiltro = new ProcesoPecDto();
        this.dtoFiltro.setAnalisisPecDto(new AnalisisPecDto());
        this.dtoFiltro.setDescripcion("");        
        return manager.getUrlLista();
    }
    
    public String iniciar(int v) {
        this.lista = null;
        this.dto = null;
        this.dtoFiltro = new ProcesoPecDto();
        this.dtoFiltro.setAnalisisPecDto(new AnalisisPecDto());
        this.dtoFiltro.setDescripcion("");        
        if (v==0) {
            return manager.getUrlLista();
        }else if (v==1) {
            return manager.getUrlListaUnidadAnalisis();
        }else if (v==2) {
            return manager.getUrlListaMatrizKarjlic();
        }else if (v==3) {
            return manager.getUrlListaCaracterizacion();
        }else if (v==4) {
            return manager.getUrlListaPlaneamiento();
        }else {
            return null;
        }
    }
    
    public void generarReporteExcel() throws DAOException {
        ProcesoPecDto f =new ProcesoPecDto();
        //List<ProcesoPecDto> l = this.manager.obtener(f);
        
        RequestContext context = RequestContext.getCurrentInstance();
        this.manager.generarExcelReporte(this.lista);
        context.addCallbackParam("CallbackParam", false);
    }
    
    public void obtenerMontoSoles () {
        this.dto.setMontoAsignadoSoles(manager.obtenerMontoSoles(this.dto));
    }
    public void obtenerCuadrante() {
        this.dto.setCuadranteDto(manager.devuelveCuadrante(this.dto));
    }
    
    public String nuevo() {
        sessionMBean.setAccion(applicationMBean.getNuevo());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));

        this.dto = manager.inicializar();
        return manager.getUrlUnidadAnalisis();
    }

    public String editar(int v) {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));        
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
            this.dto.setComentario("");
        } catch (DAOException ex) {
            logger.error(ex);
        }
        if (v == 0) {
            return manager.getUrl();
        }else if (v == 1) {
            return manager.getUrlUnidadAnalisis();
        }else if (v == 2) {
            return manager.getUrlMatrizKarjlic();
        }else if (v == 3) {
            System.out.println("tests");
            return manager.getUrlCaracterizacion();
        }else if (v == 4) {
            return manager.getUrlPlaneamiento();
        }else {
            return null;
        }
    }
    
    public void editar() {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));        
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
            this.dto.setComentario("");
        } catch (DAOException ex) {
            logger.error(ex);
        }
    }

    public void editarL(int v) throws DAOException {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));        
     
            this.dto = manager.obtenerPorId(this.dto.getId());
            this.dto.setComentario("");
    }
    
    public String ver(int v) {
        sessionMBean.setAccion(applicationMBean.getVer());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
        } catch (DAOException ex) {
            logger.error(ex);
        }
        if (v == 0) {
            return manager.getUrl();
        }else if (v == 1) {
            return manager.getUrlUnidadAnalisis();
        }else if (v == 2) {
            return manager.getUrlMatrizKarjlic();
        }else if (v == 3) {
            return manager.getUrlCaracterizacion();
        }else if (v == 4) {
            return manager.getUrlPlaneamiento();
        }else {
            return null;
        }
        
    }
    
    public String verMatrizGrafica (int ind) {
        buscar(2);
        ReportesCategoriaPecMBean reportesCategoriaPecMBean = (ReportesCategoriaPecMBean) WebServletContextListener.getApplicationContext().getBean("reportesCategoriaPecMBean");        
        return reportesCategoriaPecMBean.iniciar(this.dtoFiltro.getAnalisisPecDto(),ind);
    }
    
    
    

    public void buscar(int v) {
        try {
            if (v == 0) {
            this.lista = this.manager.obtener(this.dtoFiltro);
        }else if (v == 1) {
            this.lista = this.manager.obtener(this.dtoFiltro);
        }else if (v == 2) {                        
            //Solo filtramos los operativos
            this.dtoFiltro.setCaracteristicaDto(new ParametroDto(ConstantesPec.Parametro.CAR_OPERATIVO));
            this.dtoFiltro.setImpactoPresupuestal(BigDecimal.ZERO);
            this.lista = this.manager.obtener(this.dtoFiltro);
        }else if (v == 3) {
            detalle();
            //this.lista = this.manager.obtener(this.dtoFiltro);
        }else if (v == 4) {
            this.dtoFiltro.setAgencia(Boolean.TRUE);
            this.dtoFiltro.setImpactoPresupuestal(BigDecimal.ZERO);
            this.lista = this.manager.obtener(this.dtoFiltro);
        }else if (v == 5) {           
            this.dtoFiltro.setAgencia(null);
            this.dtoFiltro.setCuadranteDto(null);
            this.dtoFiltro.setCategoriaPecDto(null);
            this.dtoFiltro.setCaracteristicaDto(new ParametroDto(ConstantesPec.Parametro.CAR_OPERATIVO));
            this.dtoFiltro.setImpactoPresupuestal(BigDecimal.ZERO);
            this.lista = this.manager.obtener(this.dtoFiltro);
        }
            
            
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }
    
    public String allProcess () {
        buscar(5);        
        return  manager.getUrlListaCaracterizacionAll();
    }

    public String guardar() {        
        manager.guardar(this.dto);                    
        editar(1);
        return null;
    }
    
    public String verBitacora() {        
        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }

    public String retroceder(int v) {
        buscar(v);
        if (v==0) {
            return manager.getUrlLista();
        }else if (v==1) {
            return manager.getUrlListaUnidadAnalisis();
        }else if (v==2) {
            return manager.getUrlListaMatrizKarjlic();
        }else if (v==3) {
            return manager.getUrlListaCaracterizacion();
        }else if (v==4) {
            return manager.getUrlListaPlaneamiento();
        }else if (v==5){
            return manager.getUrlListaCaracterizacionAll();
        }else {
            return null;
        }
    }
    
    public String detalle() {
        if (this.matrizDto==null) {
            return allProcess();
        }
        this.dtoFiltro.setCategoriaPecDto(this.matrizDto.getCategoriaDto());
        this.dtoFiltro.setCuadranteDto(this.matrizDto.getCuadranteDto());
        this.dtoFiltro.setCaracteristicaDto(new ParametroDto(ConstantesPec.Parametro.CAR_OPERATIVO));
        this.dtoFiltro.setImpactoPresupuestal(BigDecimal.ZERO);
        this.dtoFiltro.setAgencia(null);
        try {
            this.lista = manager.obtener(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error(ex);
        }
        
        return manager.getUrlListaCaracterizacion();
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        ProcesoPecMBean.logger = logger;
    }

    public ProcesoPecManager getManager() {
        return manager;
    }

    public void setManager(ProcesoPecManager manager) {
        this.manager = manager;
    }

    public BitacoraManager getBitacoraManager() {
        return bitacoraManager;
    }

    public void setBitacoraManager(BitacoraManager bitacoraManager) {
        this.bitacoraManager = bitacoraManager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<ProcesoPecDto> getLista() {
        return lista;
    }

    public void setLista(List<ProcesoPecDto> lista) {
        this.lista = lista;
    }

    public ProcesoPecDto getDto() {
        return dto;
    }

    public void setDto(ProcesoPecDto dto) {
        this.dto = dto;
    }

    public ProcesoPecDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(ProcesoPecDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyEntidad() {
        return keyEntidad;
    }

    public void setKeyEntidad(String keyEntidad) {
        this.keyEntidad = keyEntidad;
    }

    public List<CategoriaPecDto> getListaCategorias() throws DAOException {
        CategoriaPecDto f = new CategoriaPecDto();
        f.setEstado(Boolean.TRUE);
        return managerCategoria.obtenerParaListaDesplegable(f);
    }

    public void setListaCategorias(List<CategoriaPecDto> listaCategorias) {
        this.listaCategorias = listaCategorias;
    }

    public CategoriaPecManager getManagerCategoria() {
        return managerCategoria;
    }

    public void setManagerCategoria(CategoriaPecManager managerCategoria) {
        this.managerCategoria = managerCategoria;
    }

    public List<ParametroDto> getListaNucleosCompra() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.NUCLEO_COMPRA);
    }

    public void setListaNucleosCompra(List<ParametroDto> listaNucleosCompra) {
        this.listaNucleosCompra = listaNucleosCompra;
    }

    public List<ParametroDto> getListaUnidadOrganica() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.UNIDAD_ORGANICA);
    }

    public void setListaUnidadOrganica(List<ParametroDto> listaUnidadOrganica) {
        this.listaUnidadOrganica = listaUnidadOrganica;
    }

    public List<ParametroDto> getListaGrupoNacional() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.GRUPO_NACIONAL);
    }

    public void setListaGrupoNacional(List<ParametroDto> listaGrupoNacional) {
        this.listaGrupoNacional = listaGrupoNacional;
    }

    public List<ParametroDto> getListaGrupoOtan() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.GRUPO_OTAN);
    }

    public void setListaGrupoOtan(List<ParametroDto> listaGrupoOtan) {
        this.listaGrupoOtan = listaGrupoOtan;
    }

    public List<ParametroDto> getListaCaracteristica() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.CARACTERISTICA);
    }

    public void setListaCaracteristica(List<ParametroDto> listaCaracteristica) {
        this.listaCaracteristica = listaCaracteristica;
    }

    public List<ParametroDto> getListaTiemposAbastecimiento() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.TIEMPO_ABASTECIMIENTO);
    }

    public void setListaTiemposAbastecimiento(List<ParametroDto> listaTiemposAbastecimiento) {
        this.listaTiemposAbastecimiento = listaTiemposAbastecimiento;
    }

    public List<ParametroDto> getListaCuadrante() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.CUADRANTES);
    }

    public void setListaCuadrante(List<ParametroDto> listaCuadrante) {
        this.listaCuadrante = listaCuadrante;
    }

    public List<ParametroDto> getListaTipoProceso() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.TIPO_PROCESO);
    }

    public void setListaTipoProceso(List<ParametroDto> listaTipoProceso) {
        this.listaTipoProceso = listaTipoProceso;
    }

    public List<ParametroDto> getListaTipoCompra() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.TIPO_COMPRA);
    }

    public void setListaTipoCompra(List<ParametroDto> listaTipoCompra) {
        this.listaTipoCompra = listaTipoCompra;
    }

    public List<ParametroDto> getListaNivelPrioridad() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.PRIORIDAD_INSTITUCIONAL);
    }

    public void setListaNivelPrioridad(List<ParametroDto> listaNivelPrioridad) {
        this.listaNivelPrioridad = listaNivelPrioridad;
    }

    public List<ParametroDto> getListaTipoMonedas() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.TIPO_MONEDA);
    }

    public void setListaTipoMonedas(List<ParametroDto> listaTipoMonedas) {
        this.listaTipoMonedas = listaTipoMonedas;
    }

    public List<ParametroDto> getListaFuentesFinanciamiento() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.TIPO_FINANCIAMIENTO);
    }

    public void setListaFuentesFinanciamiento(List<ParametroDto> listaFuentesFinanciamiento) {
        this.listaFuentesFinanciamiento = listaFuentesFinanciamiento;
    }    

    public AnalisisPecManager getAnalisisPecManager() {
        return analisisPecManager;
    }

    public void setAnalisisPecManager(AnalisisPecManager analisisPecManager) {
        this.analisisPecManager = analisisPecManager;
    }

    public MatrizDto getMatrizDto() {
        return matrizDto;
    }

    public void setMatrizDto(MatrizDto matrizDto) {
        this.matrizDto = matrizDto;
    }

    public List<MatrizDto> getListaMatriz() {
        return listaMatriz;
    }

    public void setListaMatriz(List<MatrizDto> listaMatriz) {
        this.listaMatriz = listaMatriz;
    }

    public MatrizManager getMatrizManager() {
        return matrizManager;
    }

    public void setMatrizManager(MatrizManager matrizManager) {
        this.matrizManager = matrizManager;
    }

    
    public List<ParametroDto> getListaModalidades() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.MODALIDAD);
    }

    public void setListaModalidades(List<ParametroDto> listaModalidades) {
        this.listaModalidades = listaModalidades;
    }

    public List<ParametroDto> getListaFrecuencias() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPec.CatalogoParametro.FRECUENCIA_NECESIDAD);
    }

    public void setListaFrecuencias(List<ParametroDto> listaFrecuencias) {
        this.listaFrecuencias = listaFrecuencias;
    }

   
    
    
    
}
